package com.inei.cie.capitulov;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import com.inei.cie.R;
import com.inei.cie.capituloi.CapituloI_Capitulos_Activity;
import com.inei.cie.capituloix.CapituloIX_Activity;
import com.inei.cie.dao.CapituloVDao;
import com.inei.cie.utilitarios.Variables;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemSelectedListener;

public class CapituloV_Foto_Pisos extends Activity {

	private ImageView iviFotoPiso;
	private static final int TAKE_PHOTO_CODE = 1;
	private String codLocal;
	private int numeroPredio;
	private String escala;
	private TextView tviMensajeNoFoto;
	private String rutaFoto;
	private int numberOfImages;
	private TextView tviNumeroCodigoLocal;
	private TextView tviNumeroPredio;
	private TextView tviNumeroPiso;
	private String escalaSeleccionada;
	private Spinner spiEscala;
	private Button butFoto;
	private Boolean fotoTomada = false;
	private Boolean nuevoPiso = true;
	private int piso = 0;

	// public static Boolean retroceso;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.capitulo_v_foto_pisos);
		CapituloVDao dao = new CapituloVDao(CapituloV_Foto_Pisos.this);
		iviFotoPiso = (ImageView) findViewById(R.id.iviFoto_Piso);
		tviMensajeNoFoto = (TextView) findViewById(R.id.tviMensajeNoFoto);
		tviNumeroCodigoLocal = (TextView) findViewById(R.id.tviNumeroCodigoLocal);
		tviNumeroPredio = (TextView) findViewById(R.id.tviNumeroPredio);
		tviNumeroPiso = (TextView) findViewById(R.id.tviNumeroPiso);
		spiEscala = (Spinner) findViewById(R.id.spiEscala);
		butFoto = (Button) findViewById(R.id.butFoto);
		codLocal = getIntent().getExtras().getString("id_local");
		numeroPredio = getIntent().getExtras().getInt("Nro_Pred");

		numberOfImages = dao.cantidadPisos(codLocal, numeroPredio + "");
		nuevoPiso = getIntent().getExtras().getBoolean("nuevaFoto");
		// if(retroceso == null || !retroceso){
		piso = numberOfImages + 1;
		// retroceso = true;
		// } else{
		// piso = numberOfImages;
		// }
		// setTitle("Piso" + PISO);
		escala = "1-10";
		tviNumeroCodigoLocal.setText(codLocal);
		tviNumeroPredio.setText(String.valueOf(numeroPredio));
		Bitmap imagen = null;
		tviNumeroPiso.setText(String.valueOf(piso));
		imagen = obtenerImagenPiso(codLocal, numeroPredio, piso);
		/*
		 * if(numberOfImages == 0){ fotoTomada = true;
		 * tviNumeroPiso.setText(String.valueOf(1)); } else{ fotoTomada = false;
		 * imagen = obtenerImagenPiso(codLocal, numeroPredio, piso);
		 * tviNumeroPiso.setText(String.valueOf(piso)); }
		 */

		if (imagen != null) {
			fotoTomada = true;
			iviFotoPiso.setImageBitmap(imagen);
			tviMensajeNoFoto.setVisibility(View.INVISIBLE);
		} else {
			fotoTomada = false;
			iviFotoPiso.setVisibility(View.INVISIBLE);
			tviMensajeNoFoto
					.setText("No existe foto para el piso de este predio");
		}

		ArrayAdapter<CharSequence> escala = ArrayAdapter.createFromResource(
				this, R.array.escala, android.R.layout.simple_spinner_item);
		escala.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

		spiEscala.setAdapter(escala);
		butFoto.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				takePhoto();
			}
		});

		spiEscala.setOnItemSelectedListener(new OnItemSelectedListener() {

			@Override
			public void onItemSelected(AdapterView<?> arg0, View arg1, int pos,
					long arg3) {
				String escalaSpinner = spiEscala.getItemAtPosition(pos)
						.toString();
				if (escalaSpinner.equals("1-10")) {
					escalaSeleccionada = "1-10";
				}
				if (escalaSpinner.equals("1-20")) {
					escalaSeleccionada = "1-20";
				}
				if (escalaSpinner.equals("1-25")) {
					escalaSeleccionada = "1-25";
				}
				if (escalaSpinner.equals("1-30")) {
					escalaSeleccionada = "1-30";
				}
				if (escalaSpinner.equals("1-50")) {
					escalaSeleccionada = "1-50";
				}
				if (escalaSpinner.equals("1-100")) {
					escalaSeleccionada = "1-100";
				}
				if (escalaSpinner.equals("1-150")) {
					escalaSeleccionada = "1-150";
				}
				if (escalaSpinner.equals("1-200")) {
					escalaSeleccionada = "1-200";
				}
				if (escalaSpinner.equals("1-250")) {
					escalaSeleccionada = "1-250";
				}
				if (escalaSpinner.equals("1-300")) {
					escalaSeleccionada = "1-300";
				}
				if (escalaSpinner.equals("1-500")) {
					escalaSeleccionada = "1-500";
				}
				if (escalaSpinner.equals("1-750")) {
					escalaSeleccionada = "1-750";
				}
				if (escalaSpinner.equals("1-1000")) {
					escalaSeleccionada = "1-1000";
				}
				if (escalaSpinner.equals("1-2000")) {
					escalaSeleccionada = "1-2000";
				}
				if (escalaSpinner.equals("1-5000")) {
					escalaSeleccionada = "1-5000";
				}
				if (escalaSpinner.equals("1-10000")) {
					escalaSeleccionada = "1-10000";
				}
			}

			@Override
			public void onNothingSelected(AdapterView<?> arg0) {
				// TODO Auto-generated method stub

			}
		});
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// TODO Auto-generated method stub
		getMenuInflater().inflate(R.menu.menu_capitulov_fotos_pisos, menu);
		menu.getItem(0).setVisible(false);
		return super.onCreateOptionsMenu(menu);
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		// TODO Auto-generated method stub

		switch (item.getItemId()) {
		case R.id.mnSalir:
			AlertDialog.Builder dialogo1 = new AlertDialog.Builder(this);
			dialogo1.setTitle("Importante");
			dialogo1.setMessage("Deseas Salir ?");
			dialogo1.setIcon(android.R.drawable.ic_dialog_alert);
			dialogo1.setCancelable(false);
			dialogo1.setPositiveButton("Si",
					new DialogInterface.OnClickListener() {
						public void onClick(DialogInterface dialogo1, int id) {
							System.exit(0);
						}
					});

			dialogo1.setNegativeButton("No",
					new DialogInterface.OnClickListener() {
						public void onClick(DialogInterface dialogo1, int id) {
							return;
						}
					});
			dialogo1.show();
			break;
		case R.id.mnIncio:
			Intent marco = new Intent(this, CapituloI_Capitulos_Activity.class);
			marco.putExtras(getIntent().getExtras());
			startActivity(marco);
			finish();
			break;
		case R.id.Leyenda:
			DialogoLeyenda();
			break;
		case R.id.mnGuardar:
			if (fotoTomada) {
				String rutaFoto = getTempFile(getApplicationContext())
						.getAbsolutePath();
				Variables var = new Variables();
				Bundle b = getIntent().getExtras();
				b.putString("id_local", codLocal);
				b.putInt("P5_NroPred", numeroPredio);
				b.putInt("P5_NroPiso", numberOfImages);
				b.putString(var.RUTA_FOTO_PISOS, rutaFoto);
				b.putString(var.ESCALA, escala);
				if (piso == 1) {
					Intent intent = new Intent(CapituloV_Foto_Pisos.this,
							CapituloV_Edificaciones_Activity.class);
					intent.putExtras(b);
					startActivity(intent);
					finish();
				} else {
					Intent intent = new Intent(CapituloV_Foto_Pisos.this,
							CapituloV_Total_Ambientes_Activity.class);
					intent.putExtras(b);
					startActivity(intent);
					finish();
				}
			} else {
				if (numberOfImages == 0) {
					Toast.makeText(getApplicationContext(),
							"No ha tomado la foto del piso 1 del predio",
							Toast.LENGTH_SHORT).show();
				} else {
					Toast.makeText(
							getApplicationContext(),
							"No ha tomado la foto del piso " + numberOfImages
									+ "del predio", Toast.LENGTH_SHORT).show();
				}
			}
			break;
		case R.id.mnFoto:
			Intent foto = new Intent(CapituloV_Foto_Pisos.this,
					CapituloIX_Activity.class);
			// b.putBoolean("pregunta", true);
			foto.putExtras(getIntent().getExtras());
			foto.putExtra("pregunta", true);
			startActivity(foto);
			break;
		default:
			break;
		}
		return super.onOptionsItemSelected(item);
	}

	private void takePhoto() {
		final Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
		intent.putExtra(MediaStore.EXTRA_OUTPUT,
				Uri.fromFile(getTempFile(this)));
		startActivityForResult(intent, TAKE_PHOTO_CODE);
	}

	private File getTempFile(Context context) {
		File sdCard = Environment.getExternalStorageDirectory();
		File dir = new File(sdCard.getAbsolutePath() + "/CIE2013/" + codLocal
				+ "/PRED_" + numeroPredio + "/CAP5");
		final File path = dir;
		if (!path.exists()) {
			path.mkdirs();
		}
		File[] files = dir.listFiles();
		numberOfImages = files.length;
		if (numberOfImages == 0) {
			return new File(path, codLocal + "_" + numeroPredio + "_Piso" + 1
					+ ".png");
		} else {
			return new File(path, codLocal + "_" + numeroPredio + "_Piso"
					+ piso + ".png");
		}

	}

	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		super.onActivityResult(requestCode, resultCode, data);
		switch (requestCode) {
		case 1:
			if (resultCode == RESULT_OK) {
				File sdCard = Environment.getExternalStorageDirectory();
				File imgFile = null;
				if (numberOfImages == 0) {
					imgFile = new File(sdCard.getAbsolutePath() + "/CIE2013/"
							+ codLocal + "/PRED_" + numeroPredio + "/CAP5/"
							+ codLocal + "_" + numeroPredio + "_Piso" + 1
							+ ".png");
				} else {
					imgFile = new File(sdCard.getAbsolutePath() + "/CIE2013/"
							+ codLocal + "/PRED_" + numeroPredio + "/CAP5/"
							+ codLocal + "_" + numeroPredio + "_Piso" + piso
							+ ".png");
				}
				Bitmap myBitmap = BitmapFactory.decodeFile(imgFile
						.getAbsolutePath());
				iviFotoPiso.setVisibility(View.VISIBLE);
				tviMensajeNoFoto.setVisibility(View.INVISIBLE);
				iviFotoPiso.setImageBitmap(myBitmap);
				fotoTomada = true;
			}
		}
	}

	public Bitmap obtenerImagenPiso(String codigoLocal, int numeroPredio,
			int piso) {
		Bitmap bitmap = null;
		try {
			File sdCard = Environment.getExternalStorageDirectory();
			File directory = new File(sdCard.getAbsolutePath() + "/CIE2013/"
					+ codigoLocal + "/PRED_" + numeroPredio + "/CAP5");
			File file = new File(directory, codigoLocal + "_" + numeroPredio
					+ "_Piso" + piso + ".png");
			FileInputStream streamIn;
			streamIn = new FileInputStream(file);
			bitmap = BitmapFactory.decodeStream(streamIn);
			streamIn.close();
			fotoTomada = true;
		} catch (FileNotFoundException e) {
			fotoTomada = false;
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			fotoTomada = false;
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return bitmap;
	}

	public void DialogoLeyenda() {
		final Dialog dialog = new Dialog(this);
		dialog.setContentView(R.layout.dialog_leyenda_activity);
		dialog.setTitle("Leyenda");
		dialog.show();
	}

	@Override
	public void onBackPressed() {
		Bundle b = getIntent().getExtras();
		Intent capitulos = new Intent(CapituloV_Foto_Pisos.this,
				CapituloI_Capitulos_Activity.class);
		capitulos.putExtras(b);
		startActivity(capitulos);
		/*
		 * if(CapituloV_Total_Ambientes_Por_Piso_Activity.FOTO_GUARDADA == null
		 * || CapituloV_Total_Ambientes_Por_Piso_Activity.FOTO_GUARDADA ==
		 * false){ retroceso = true;
		 * CapituloV_Total_Ambientes_Por_Piso_Activity.FOTO_GUARDADA = false; }
		 * else{ retroceso = false; }
		 */
		super.onBackPressed();
		// Toast.makeText(CapituloV_Foto_Pisos.this, "Continue con el proceso",
		// Toast.LENGTH_SHORT).show();
	}

	/*
	 * public int cantidadFotos(String id_local, int predio){ File sdCard =
	 * Environment.getExternalStorageDirectory(); File dir = new
	 * File(sdCard.getAbsolutePath() + "/CIE2013/" + id_local + "/PRED_" +
	 * predio + "/CAP5"); final File path = dir; if (!path.exists()) {
	 * path.mkdirs(); } File[] files = dir.listFiles();
	 * numberOfImages=files.length; return numberOfImages; }
	 */
}
